草庐IT

TypeScript 运算符

全部标签

c++ - C++ 中的切片和运算符重载

背景信息我已经使用Java编程一段时间了,几个月前我才切换到C++,所以如果我错过了一些愚蠢的答案,我深表歉意!说了这么多,是时候解决手头的问题了!我正在开发一个基本的基于文​​本的游戏引擎,我最近遇到了一个有趣的特定且不太可能出现的问题。我尝试在下面的程序中以较小的规模对其进行测试,并决定只显示它(而不是我的实际游戏代码),以免阻塞屏幕,并使问题不那么复杂。下面建模的问题反射(reflect)了我的实际代码的问题,只是没有蓬松的干扰因素。问题本质上,问题是多态性问题之一。我想重载输出运算符“[示例]代码#include#include#includeusingnamespacestd

c++ - 如何控制运算符[]分配的值

我知道如何重载operator[]如下:T&operator[](intidx){returnTheArray[idx];}Toperator[](intidx)const{returnTheArray[idx];}但我想要的是控制arr[i]=value赋值。我想控制值在0到9之间。有什么语法可以这样做吗? 最佳答案 您必须编写一个模板类来保存对数组(T类型)中元素的引用,在该模板中您实现赋值运算符,然后您可以在其中实现您的检查。然后从[]运算符返回此模板类的对象。像这样:templateclassRangeCheck{publi

c++ - 为什么 C++ 不提示运算符函数的多个定义?

这个问题在这里已经有了答案:operatoroverloading,memberandnon-memberfunction,whichonehaspriority?(2个答案)关闭4年前。以下代码有2个operator+定义-一个在类Foo上,另一个是独立函数。我觉得编译器应该提示这个,但它没有。当我在主函数中使用operator+时,它会选择类中定义的那个。当我删除类中的那个时,它开始使用独立函数。删除类方法会悄无声息地改变C++程序的行为这一事实非常令人担忧。这背后有什么理由吗?https://ideone.com/rtfEFP#includeclassFoo{public:int

c++ - 在可能的情况下,C++ 是否总是更喜欢右值引用转换运算符而不是 const 左值引用?

在编写转换运算符时,如果我同时提供到constT&和T&&的转换,C++是否会尽可能优先选择右值运算符?在这个小测试中似乎是这样:#include#includestructholds{operatorint&&(){printf("moving!\n");returnstd::move(i);}operatorconstint&()const{printf("copying!\n");returni;}private:inti=0;};intmain(){holdsh;intval=h;}打印:╰─▸./testmoving!但也许有人说的专业知识比我验证的要好?

c++ - 为什么 delete 运算符可以用在 const 上下文中?

这个问题不同于:Isadestructorconsideredaconstfunction?new-expressionanddelete-expressiononconstreferenceandconstpointerDeletingapointertoconst(Tconst*)我写了一个这样的类Test。classTest{private:int*p;public://constructorTest(inti){p=newint(i);}Test&operator=(constTest&rhs){deletep;p=newint(*(rhs.p));return*this;}}

用于验证相等运算符的 C++ 测试随着时间的推移与结构保持一致

我对@TomalakGeretkal投了赞成票,因为他对按契约(Contract)做了很好的说明;我没有接受答案,因为我的问题是如何以编程方式检查equals函数。我有一个POD结构和一个相等运算符,这是一个拥有超过100名工程师的系统的(非常)小部分。随着时间的推移,我希望结构被修改(成员添加/删除/重新排序),我想编写一个测试来验证相等操作是否正在测试结构的每个成员(例如,作为结构保持最新变化)。正如Tomalak指出的那样-评论和“按契约(Contract)”通常是执行此操作的最佳/唯一方式;然而,在我的情况下,我预计会出现问题,并想探索是否有任何方法可以主动捕获(至少很多)修改

c++ - 流输出和隐式 void* 转换运算符函数调用

像这样的代码cin>>grade;其中等级是标准数据类型返回对cin(istream对象)的引用,它启用级联输入....但我读到如果cin>>grade;用作while语句中的条件...流的void*强制转换运算符函数被隐式调用...并将对istream对象的引用转换为非空或空指针,具体取决于成功或失败最后一次输入操作...空指针转换为假,非空指针转换为真...我的问题是:什么是void*cast运算符函数,它在这里是如何工作的非空指针如何转为真,空指针如何转为假 最佳答案 1.whatisthevoid*castoperatorf

c++ - GCC 的 _Pragma 运算符中的预处理器标记粘贴

我正在尝试做类似于anotherquestion的事情,即有条件地在我的程序中包含OpenMP编译指示。但是,我想更进一步,避免用户每次使用pragma时都需要指定omp。换句话说,我希望编译以下代码:#include#include#ifdef_OPENMP#defineLIB_PRAGMA_OMP(x)_Pragma("omp"#x)#else#defineLIB_PRAGMA_OMP(x)#endifintmain(){LIB_PRAGMA_OMP(parallel){std::printf("Hellofromthread%d\n",omp_get_thread_num());

c++ - 为什么要对地址运算符和引用声明符共享与符号 (&)?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。在C++中,&字符(&)可用于获取左值的地址、函数指示符或限定名称。.inty;int*p_to_y=&y;该字符在C++中作为引用声明符共享使用。.inty;int&y_alias=y;在粗略了解C之后学习C++时,这种双重用法让我很困惑!我知道使用符号的上下文会造成所有差异,但鉴于引用和指针是不应混淆的重要概念,任何人都可以提出为什么&被回收而不是使

c++ - 排序中的 < 运算符断言无效

我正在尝试实现一个简单的比较器,用于根据数组“_vec”中的值对索引进行排序。我收到“无效classCompare{vector&_vec;public:Compare(vector&vec):_vec(vec){}booloperator()(size_ti,size_tj){if(_vec[i]!=_vec[j])return_vec[i]我正在使用以下函数调用:sort(inds.begin(),inds.end(),Compare(vals));其中inds只是一个包含从1到15(比如说)的索引的数组,而vals是长度为15的数组,其中包含一些我想要计算其排序索引的值。总体目标